Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

279
Vistas
Texto mecanografiado -> una respuesta dinámica de una API cómo escribir

Estoy consumiendo una API que devuelve json anidado. Es dinámico, por lo que las claves a menudo serán diferentes, pero solo pueden ser un objeto o una cadena, no pueden ser una matriz o un número, etc.

Aquí hay un ejemplo:

 const response = { name: 'Pete', location: 'London', age: { year: '21' } }

He intentado escribirlo así:

 type Response = { [key: string]: string }

Luego, en un componente React, quiero usarlo así:

 type Response = { [key: string]: string } const Foo = ({ data }: Response) => { return <pre>{JSON.stringify(data, null, 2)}</pre> }

Esto me da el siguiente error:

La propiedad 'x' no existe en el tipo 'cadena'

Puede alguien señalarme la dirección correcta?

aquí hay un enlace a stackblitz - https://stackblitz.com/edit/react-ts-4n7vcy?file=App.tsx

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Lo que está haciendo es asignar el tipo de Response al argumento props de su componente funcional Foo . Entonces, en realidad, el componente Foo acepta un objeto props con el tipo de Response , pero la variable data se infiere como una cadena por mecanografiado. Lo que deberías hacer en su lugar es;

 interface IFooProps{ data: Response; } const Foo = (props: IFooProps) => { return <pre>{JSON.stringify(props.data, null, 2)}</pre>; };
about 4 years ago · Juan Pablo Isaza Denunciar

0

El problema es que los valores en su tipo son cadenas. Cuando extrajo la clave data , su tipo era una cadena. Tienes que escribirlo como:

 type Response = { data: { [key: string]: string } }

O aceptarlo en el componente como

 const Foo = (data: Response) => { // ... }

Si desea que los valores sean cadenas u objetos anidados, puede hacer lo siguiente:

 type Response = { [key: string]: string | Response }

Y luego los data en su ejemplo serán de tipo string | Response

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda